#pragma once
#include<iostream>
#include<string>
using namespace std;

typedef void*(*func_t)(void*);
class ThreadData
{
public:
    string _name;
    void* _args;
};
class Thread
{
public:
    Thread(int num,func_t callbacks,void* args)
    :_func(callbacks)
    {
        char namebuffer[1024];
        snprintf(namebuffer,sizeof(namebuffer),"Thread-%d",num);
        _name=namebuffer;
        _tdata._args=args;
        _tdata._name=_name;
    }
    void start()
    {
        pthread_create(&_tid,nullptr,_func,(void*)&_tdata);
    }
    void join()
    {
        pthread_join(_tid,nullptr);
    }
    ~Thread()
    {
        
    }
private:
    string _name;
    func_t _func;
    ThreadData _tdata;
    pthread_t _tid;
};
// #include<iostream>
// #include<vector>
// #include<queue>
// #include<unistd.h>
// #include"LockGuard.hpp"
// #include"Task.hpp"

// using namespace std;

// const int g_thread_num=3;
// template <class T>
// class ThreadPool
// {
// private:
//     int _num;
//     vector<Thread*> _threads;
//     queue<T> _task_queue;
//     static ThreadPool<T>* _thread_ptr;
//     static pthread_mutex_t _mutex;
//     pthread_mutex_t _lock;
//     pthread_cond_t _cond;
// };
